package es.udc.pfc.davidparedes.model.storeservice;

import java.util.Calendar;
import java.util.List;

import es.udc.pfc.davidparedes.model.mission.Mission;
import es.udc.pfc.davidparedes.model.receptionist.Receptionist;
import es.udc.pfc.davidparedes.model.store.Store;
import es.udc.pfc.davidparedes.model.universe.Universe;
import es.udc.pfc.davidparedes.model.universemanager.UniverseManager;
import es.udc.pfc.davidparedes.model.util.DuplicateInstanceException;
import es.udc.pfc.davidparedes.model.util.InstanceNotFoundException;
import es.udc.pfc.davidparedes.model.vendor.Vendor;
import es.udc.pfc.davidparedes.model.shift.Shift;
import es.udc.pfc.davidparedes.model.task.Task;


public interface StoreService {
	
	public Store registerStore(String name, String address)
		throws DuplicateInstanceException;
	
	public void updateStore(Long storeId, String name, String address)
			throws InstanceNotFoundException;
	
	public void deleteStore(Long storeId)
			throws InstanceNotFoundException;
	
	public Store findStore(long storeId)
			throws InstanceNotFoundException;
	
	public Store findStoreByName(String name)
			throws InstanceNotFoundException;
	
	public Universe registerUniverse(String name, long storeId)
		throws InstanceNotFoundException;
	
	public void updateUniverse(Long universeId, String name, Long storeId)
			throws InstanceNotFoundException;
	
	public void deleteUniverse(Long universeId)
			throws InstanceNotFoundException;
	
	public boolean setUniverseManager(long universeId, long managerId)
			throws InstanceNotFoundException;
	
	public Universe findUniverse(long universeId)
			throws InstanceNotFoundException;
	
	public List<Mission> getMissionsByDate(Long storeId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public List<Mission> getCurrentMissions(Long storeId)
			throws InstanceNotFoundException;
	
	public List<Shift> getUniverseShiftsByDate(Long universeId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public List<Shift> getStoreShiftsByDate(Long storeId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public List<Shift> getCurrentShifts(Long universeId)
			throws InstanceNotFoundException;
	
	public List<Task> getUniverseTasksByDate(Long universeId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public List<Task> getCurrentTasks(Long universeId)
			throws InstanceNotFoundException;
	
	public List<UniverseCurrentActivityDTO> getCurrentActivity(Long storeId)
			throws InstanceNotFoundException;
	
	public List<UniverseRowStatsDTO> getUniverseStats(Long universeId)
    		throws InstanceNotFoundException;
	
	public List<Receptionist> getStoreReceptionists(Long storeId)
			throws InstanceNotFoundException;
	
	public List<Vendor> getStoreVendors(Long storeId)
			throws InstanceNotFoundException;
	
	public List<UniverseManager> getStoreManagers(Long storeId)
			throws InstanceNotFoundException;
	
	public List<StoreDirectorsDTO> getAllStoresAndDirectors();

}
